gusucode.com > VC++ 图片浏览器的设计与实现+设计文档源码程序 > VC++ 图片浏览器的设计与实现+设计文档源码程序/code/PictView/PictViewDoc.cpp
//Download by http://www.NewXing.com // PictViewDoc.cpp : implementation of the CPictViewDoc class // #include "stdafx.h" #include "PictView.h" #include "PictViewDoc.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPictViewDoc IMPLEMENT_DYNCREATE(CPictViewDoc, CDocument) BEGIN_MESSAGE_MAP(CPictViewDoc, CDocument) //{{AFX_MSG_MAP(CPictViewDoc) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSaveAs) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPictViewDoc construction/destruction CPictViewDoc::CPictViewDoc() { // TODO: add one-time construction code here m_bIsEmptyDoc = TRUE; //是否为空文档 m_bIsEmptyDir = FALSE; //程序初始时置为FALSE.否则会直接在用户区显示“无图像”提示。 } CPictViewDoc::~CPictViewDoc() { } BOOL CPictViewDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: add reinitialization code here // (SDI documents will reuse this document) m_bIsEmptyDoc=TRUE; //标志为空文档 //SetTitle("未打开任何文件"); //Set File name for Title line when window is loaded. return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CPictViewDoc serialization void CPictViewDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } } BOOL CPictViewDoc::InitPicList(LPCTSTR pszFileName) { //BOOL bRet = FALSE; char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; _splitpath(pszFileName, drive, dir, fname, ext); CString str; str.Format("%s%s",drive,dir); str = str + "*.*"; CFileFind cFind; BOOL ans = cFind.FindFile(str); m_iFileNumber = 0; while(ans) { if(m_iFileNumber<MAX_SEARCH_NUM) { ans = cFind.FindNextFile(); if(cFind.IsDirectory()) //如果找到的是目录则跳过 continue; CString FilName = cFind.GetFileName(); LPCTSTR pszExt = _tcsrchr(FilName,_T('.')); if(pszExt) //如果有扩展名,则继续分析扩展名,否则不分析。如果无扩展名仍分析 //则_tcsicmp()会执行出错. {//##**## if((_tcsicmp(pszExt,".bmp") == 0)||(_tcsicmp(pszExt,".tga") == 0) ||(_tcsicmp(pszExt,".pcx") == 0)||(_tcsicmp(pszExt,".jpg") == 0) ||(_tcsicmp(pszExt,".jpeg") == 0)||(_tcsicmp(pszExt,".gif") == 0)) { m_PicList[m_iFileNumber] = cFind.GetFileName(); CString FilePath; FilePath.Format("%s%s",drive,dir); m_PicList[m_iFileNumber] = FilePath + m_PicList[m_iFileNumber] ; m_iFileNumber++; } } } else { CString sPrompt; int num = MAX_SEARCH_NUM; sPrompt.Format("当前目录中包含的图片文件多于%d个,当翻页浏览时将只显示前%d个。",num,num); AfxMessageBox("sPrompt"); } } m_iFileNumber--; //因为上面while每循环一次m_iFileNumber加1,当最后一张图片进入列表后仍加1 //故比实际的个数多一,在此减去。 cFind.Close(); return TRUE; } void CPictViewDoc::ReInitPicList() { //在删除的图片列表前的文件列表部分不变 //在删除的图片列表后的部分列表前移 for(int i = m_iCurrFileNum + 1;i<=m_iFileNumber;i++) { m_PicList[i - 1] = m_PicList[i]; } m_iFileNumber--; } ///////////////////////////////////////////////////////////////////////////// // CPictViewDoc diagnostics #ifdef _DEBUG void CPictViewDoc::AssertValid() const { CDocument::AssertValid(); } void CPictViewDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CPictViewDoc commands void CPictViewDoc::OnUpdateFileSave(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here if(m_bIsEmptyDoc || m_bIsEmptyDir) pCmdUI->Enable(FALSE); else pCmdUI->Enable(TRUE); } void CPictViewDoc::OnUpdateFileSaveAs(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here if(m_bIsEmptyDoc || m_bIsEmptyDir) pCmdUI->Enable(!m_bIsEmptyDoc); else pCmdUI->Enable(TRUE); }